import java.awt.*;
import javax.swing.*;
import java.util.*;
import java.text.*;
import javax.swing.border.*;
import java.awt.event.*;
import java.sql.*;

class input_Buku extends JInternalFrame {
  JLabel jenis_buku = new JLabel();
  JLabel no_buku = new JLabel();
  JLabel thn_terbit = new JLabel();
  JLabel kode_buku = new JLabel();
  JLabel nama_pengarang = new JLabel();
  JLabel judul_buku = new JLabel();
  JLabel nama_penerbit = new JLabel();
  JLabel jml_halaman = new JLabel();
  JLabel jml_buku = new JLabel();
  JTextField data_no_buku = new JTextField();
  JTextField data_kode_buku = new JTextField();
  JTextField data_judul_buku = new JTextField();
  JTextField data_nama_pengarang = new JTextField();
  JComboBox data_thn_terbit = new JComboBox();
  JTextField data_nama_penerbit = new JTextField();
  JTextField data_jml_halaman = new JTextField();
  JTextField data_jml_buku = new JTextField();
  JButton tombol_simpan = new JButton();
  JButton tombol_update = new JButton();
  JPanel panel_data = new JPanel();
  JPanel panel_tombol = new JPanel();
  JButton tombol_edit = new JButton();
  JButton tombol_tambah = new JButton();
  JLabel jLabel1 = new JLabel();
  JComboBox data_jenis_buku = new JComboBox();
  JLabel jLabel2 = new JLabel();
  JLabel jLabel3 = new JLabel();
  JLabel no_rak_buku = new JLabel();
  JTextField data_no_rak_buku = new JTextField();
  JLabel label_jenis = new JLabel();
  JLabel label_contoh = new JLabel();

  public input_Buku() {
    super(".:: Form Pengisian Data Buku ::.");
    tampilanGUI();
    komponen_tidak_aktif();
    hapus_teks_komponen();
    listener_komponen_teks();
    listener_tombol();
  }

  void tampilanGUI() {
    jenis_buku.setHorizontalAlignment(SwingConstants.RIGHT);
    jenis_buku.setText("Jenis Buku :");
    no_buku.setHorizontalAlignment(SwingConstants.RIGHT);
    no_buku.setText("No. Buku :");
    kode_buku.setHorizontalAlignment(SwingConstants.RIGHT);
    kode_buku.setText("Kode Buku :");
    judul_buku.setHorizontalAlignment(SwingConstants.RIGHT);
    judul_buku.setText("Judul Buku :");
    nama_pengarang.setHorizontalAlignment(SwingConstants.RIGHT);
    nama_pengarang.setText("Nama Pengarang :");
    thn_terbit.setHorizontalAlignment(SwingConstants.RIGHT);
    thn_terbit.setText("Tahun Terbitt :");
    nama_penerbit.setHorizontalAlignment(SwingConstants.RIGHT);
    nama_penerbit.setText("Nama Penerbit :");
    jml_halaman.setHorizontalAlignment(SwingConstants.RIGHT);
    jml_halaman.setText("Jumlah Halaman :");
    jml_buku.setHorizontalAlignment(SwingConstants.RIGHT);
    jml_buku.setText("Jumlah Buku :");
    no_rak_buku.setHorizontalAlignment(SwingConstants.RIGHT);
    no_rak_buku.setText("No. Rak Buku :");

    kode_buku.setBounds(new Rectangle(0, 10, 100, 15));
    jenis_buku.setBounds(new Rectangle(0, 40, 100, 15));
    no_buku.setBounds(new Rectangle(0, 70, 100, 15));
    judul_buku.setBounds(new Rectangle(0, 100, 100, 15));
    nama_pengarang.setBounds(new Rectangle(0, 130, 100, 15));
    thn_terbit.setBounds(new Rectangle(0, 160, 100, 15));
    nama_penerbit.setBounds(new Rectangle(0, 190, 100, 15));
    jml_halaman.setBounds(new Rectangle(0, 220, 100, 15));
    jml_buku.setBounds(new Rectangle(0, 250, 100, 15));
    no_rak_buku.setBounds(new Rectangle(0, 280, 100, 15));
    data_kode_buku.setBounds(new Rectangle(105, 10, 99, 20));
    data_jenis_buku.setBounds(new Rectangle(105, 40, 148, 20));
    data_jenis_buku.addItem("-- Pilih Jenis Buku --");
    data_jenis_buku.addItem("AGA - Agama");
    data_jenis_buku.addItem("EKO - Ekonomi");
    data_jenis_buku.addItem("HUK - Hukum");
    data_jenis_buku.addItem("IPE - Ilmu Pengetahuan");
    data_jenis_buku.addItem("KOM - Komputer");
    data_jenis_buku.addItem("TAN - Pertanian");
    data_jenis_buku.addItem("PSI - Psikologi");
    data_jenis_buku.addItem("POL - Sosial Politik");
    data_jenis_buku.addItem("TEK - Teknik");
    data_jenis_buku.addItem("UMU - Umum");

    data_no_buku.setBounds(new Rectangle(105, 70, 102, 20));
    data_judul_buku.setBounds(new Rectangle(105, 100, 312, 20));
    data_nama_pengarang.setBounds(new Rectangle(105, 130, 313, 20));
    data_thn_terbit.setBounds(new Rectangle(105, 160, 72, 20));
    for (int i = 1900; i <= Calendar.getInstance().get(Calendar.YEAR); i++) {
      data_thn_terbit.addItem(Integer.toString(i));
    }
    data_nama_penerbit.setBounds(new Rectangle(105, 190, 154, 20));
    data_jml_halaman.setHorizontalAlignment(SwingConstants.RIGHT);
    data_jml_halaman.setBounds(new Rectangle(105, 220, 60, 20));
    data_jml_buku.setHorizontalAlignment(SwingConstants.RIGHT);
    data_jml_buku.setBounds(new Rectangle(105, 250, 60, 20));
    data_no_rak_buku.setBounds(new Rectangle(105, 280, 94, 20));

    tombol_simpan.setBounds(new Rectangle(15, 317, 73, 25));
    tombol_simpan.setText("Simpan");
    tombol_update.setBounds(new Rectangle(98, 317, 73, 25));
    tombol_update.setText("Update");
    tombol_edit.setText("Edit Data");
    tombol_tambah.setText("Tambah Baru");
    panel_data.setLayout(null);
    jLabel1.setText(
        "Create by Midiyaqa ( Group 2");
    jLabel2.setText("Halaman");
    jLabel2.setBounds(new Rectangle(170, 220, 103, 18));
    jLabel3.setText("Exemplar");
    jLabel3.setBounds(new Rectangle(170, 250, 107, 21));

    panel_data.setBorder(BorderFactory.createRaisedBevelBorder());
    label_jenis.setText("* (Pilih Jenis Buku kemudian tekan ENTER)");
    label_jenis.setBounds(new Rectangle(263, 39, 212, 19));
    label_contoh.setText("* (Contoh Kode Buku :   IPE-2015  )");
    label_contoh.setBounds(new Rectangle(215, 10, 238, 18));
    panel_data.add(jenis_buku);
    panel_data.add(no_buku);
    panel_data.add(kode_buku);
    panel_data.add(judul_buku);
    panel_data.add(nama_pengarang);
    panel_data.add(thn_terbit);
    panel_data.add(nama_penerbit);
    panel_data.add(jml_halaman);
    panel_data.add(jml_buku);
    panel_data.add(no_rak_buku);
    panel_data.add(data_jenis_buku);
    panel_data.add(data_no_buku);
    panel_data.add(data_kode_buku);
    panel_data.add(data_judul_buku);
    panel_data.add(data_nama_pengarang);
    panel_data.add(data_thn_terbit);
    panel_data.add(data_nama_penerbit);
    panel_data.add(data_jml_halaman);
    panel_data.add(data_jml_buku);
    panel_data.add(data_no_rak_buku);
    panel_data.add(tombol_update);
    panel_data.add(tombol_simpan);
    panel_data.add(label_jenis, null);
    panel_data.add(label_contoh, null);
    panel_data.add(jLabel2);
    panel_data.add(jLabel3);

    panel_tombol.setLayout(new FlowLayout(FlowLayout.LEFT));
    panel_tombol.add(tombol_tambah);
    panel_tombol.add(tombol_edit);

    this.getContentPane().add(jLabel1, BorderLayout.SOUTH);
    this.getContentPane().add(panel_tombol, BorderLayout.NORTH);
    this.getContentPane().add(panel_data, BorderLayout.CENTER);
  }

  public void listener_komponen_teks() {
    data_kode_buku.setDocument(new saring_karakter().getToUpperCase());
    data_kode_buku.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (data_kode_buku.getText().length() >= 8) {
          data_kode_buku.setText(data_kode_buku.getText().substring(0, 8).
                                 toUpperCase());
          Connection kon = new koneksi_database().koneksiDatabase();
          boolean ada_data = false;
          try {
            String sql = "Select * from data_buku where kode_buku = '" +
                         data_kode_buku.getText() + "'";
            PreparedStatement st = kon.prepareStatement(sql);
            ResultSet rs = st.executeQuery();
            while (rs.next()) {
              data_jenis_buku.setSelectedItem(rs.getString("jenis_buku"));
              String dt_no_buku = rs.getString("no_buku");
              int panjang = dt_no_buku.length();
              for (int i = 1; i <= (4 - panjang); i++) {
                dt_no_buku = "0" + dt_no_buku;
              }
              data_no_buku.setText(dt_no_buku);

              data_judul_buku.setText(rs.getString("judul_buku"));
              data_nama_pengarang.setText(rs.getString("nama_pengarang"));
              data_thn_terbit.setSelectedItem(rs.getString("thn_terbit"));
              data_nama_penerbit.setText(rs.getString("nama_penerbit"));
              data_jml_halaman.setText(rs.getString("jml_halaman"));
              data_jml_buku.setText(rs.getString("jml_buku"));
              data_no_rak_buku.setText(rs.getString("no_rak_buku"));

              ada_data = true;
              komponen_aktif();
              data_judul_buku.requestFocus();
              data_jenis_buku.setEnabled(false);
              data_kode_buku.setEditable(false);
              tombol_simpan.setEnabled(false);
            }
            st.close();
            kon.close();
          }
          catch (SQLException swl) {}
          if (ada_data == false) {
            hapus_teks_komponen();
            komponen_tidak_aktif();
            JOptionPane.showMessageDialog(null, "Data Buku Tidak Ditemukan");
            data_kode_buku.setEnabled(true);
            data_kode_buku.requestFocus();
          }
        }
      }
    });


    data_jenis_buku.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_jenis_buku.getSelectedItem().equals("-- Pilih Jenis Buku --")) {
          }
          else {
            komponen_aktif();
            tombol_update.setEnabled(false);
            data_no_buku.setEnabled(false);
            data_kode_buku.setEnabled(false);
            tombol_update.setEnabled(false);
            boolean ada_buku = false;
            String teks_jenis_buku = String.valueOf(data_jenis_buku.
                getSelectedItem());
            Connection kon = new koneksi_database().koneksiDatabase();
            try {
              String sql =
                  "select max(no_buku) as no from data_buku where jenis_buku = '" +
                  teks_jenis_buku + "'";
              Statement stat = kon.createStatement();
              ResultSet set = stat.executeQuery(sql);
              while (set.next()) {
                String nomor = set.getString("no");
                int n_buku = Integer.parseInt(nomor) + 1;
                String dt_no_buku = Integer.toString(n_buku);
                int panjang = dt_no_buku.length();
                for (int i = 1; i <= (4 - panjang); i++) {
                  dt_no_buku = "0" + dt_no_buku;
                }
                data_no_buku.setText(dt_no_buku);
                ada_buku = true;
              }
            }
            catch (Exception es) {}
            if (ada_buku == false) {
              data_no_buku.setText("0001");
            }
            data_kode_buku.setText(teks_jenis_buku.substring(0, 3) + "-" +
                                   data_no_buku.getText());
            data_judul_buku.requestFocus();
          }
        }
      }
    });

    data_judul_buku.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_judul_buku.getText().equalsIgnoreCase("")) {
          }
          else {
            data_nama_pengarang.requestFocus();
          }
        }
      }
    });

    data_nama_pengarang.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_nama_pengarang.getText().equalsIgnoreCase("")) {
          }
          else {
            data_thn_terbit.requestFocus();
          }
        }
      }
    });

    data_thn_terbit.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          data_nama_penerbit.requestFocus();
        }
      }
    });

    data_nama_penerbit.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_nama_penerbit.getText().equalsIgnoreCase("")) {
          }
          else {
            data_jml_halaman.requestFocus();
          }
        }
      }
    });

    data_jml_halaman.setDocument(new saring_karakter().getOnlyDigit());
    data_jml_halaman.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_jml_halaman.getText().equalsIgnoreCase("")) {
          }
          else {
            data_jml_buku.requestFocus();
          }
        }
      }
    });

    data_jml_buku.setDocument(new saring_karakter().getOnlyDigit());
    data_jml_buku.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_jml_buku.getText().equalsIgnoreCase("")) {
          }
          else {
            data_no_rak_buku.requestFocus();
          }
        }
      }
    });

    data_no_rak_buku.addKeyListener(new KeyAdapter() {
      public void keyReleased(KeyEvent e) {
        if (e.getKeyCode() == e.VK_ENTER) {
          if (data_no_rak_buku.getText().equalsIgnoreCase("")) {
          }
          else {
            if (tombol_simpan.isEnabled() == true) {
              tombol_simpan.requestFocus();
            }
            else {
              tombol_update.requestFocus();
            }
          }
        }
      }
    });

  }

  public void listener_tombol() {
    tombol_tambah.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        komponen_tidak_aktif();
        hapus_teks_komponen();
        label_jenis.setVisible(true);
        data_jenis_buku.setEnabled(true);
        data_jenis_buku.requestFocus();
      }
    });
    tombol_edit.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        komponen_tidak_aktif();
        hapus_teks_komponen();
        data_kode_buku.setEnabled(true);
        data_kode_buku.setEditable(true);
        label_contoh.setVisible(true);
        data_kode_buku.requestFocus();
      }
    });

    tombol_simpan.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int nilai_pesan = konfirmasi_data("Penyimpanan");
        if (nilai_pesan == 0) {

          Connection kon = new koneksi_database().koneksiDatabase();
          try {
            String sql = "INSERT INTO data_buku values (?,?,?,?,?,?,?,?,?,?)";
            PreparedStatement st = kon.prepareStatement(sql);
            try {
              st.setString(1, data_kode_buku.getText());
              st.setString(2, String.valueOf(data_jenis_buku.getSelectedItem()));
              st.setString(3, data_no_buku.getText());
              st.setString(4, data_judul_buku.getText());
              st.setString(5, data_nama_pengarang.getText());
              st.setString(6, String.valueOf(data_thn_terbit.getSelectedItem()));
              st.setString(7, data_nama_penerbit.getText());
              st.setString(8, data_jml_halaman.getText());
              st.setString(9, data_jml_buku.getText());
              st.setString(10, data_no_rak_buku.getText());
              st.executeUpdate();

              komponen_tidak_aktif();
              hapus_teks_komponen();
              tombol_tambah.requestFocus();
            }
            // Proses penyimpanan Gagal
            catch (SQLException se) {
              System.out.println(se);
              JOptionPane.showMessageDialog(null,
                  "Kode yang Anda masukkan telah ada sebelumnya \nGagal disimpan.. Coba Lagi");
            }
            st.close();
            kon.close();
          }
          catch (SQLException swl) {}
        }
      }
    });

    tombol_update.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        int nilai_pesan = konfirmasi_data("Editing (Perubahan)");
        if (nilai_pesan == 0) {

          Connection kon = new koneksi_database().koneksiDatabase();
          try {
            String sql = "UPDATE data_buku SET judul_buku=?, nama_pengarang=?," +
                         " thn_terbit=?, nama_penerbit=?, jml_halaman=?, " +
                         "jml_buku=?, no_rak_buku=? WHERE kode_buku = '" +
                         data_kode_buku.getText() + "'";
            PreparedStatement st = kon.prepareStatement(sql);
            try {
              st.setString(1, data_judul_buku.getText());
              st.setString(2, data_nama_pengarang.getText());
              st.setString(3, String.valueOf(data_thn_terbit.getSelectedItem()));
              st.setString(4, data_nama_penerbit.getText());
              st.setString(5, data_jml_halaman.getText());
              st.setString(6, data_jml_buku.getText());
              st.setString(7, data_no_rak_buku.getText());
              st.executeUpdate();

              komponen_tidak_aktif();
              hapus_teks_komponen();
              tombol_edit.requestFocus();
            }
            // Proses penyimpanan Gagal
            catch (SQLException se) {}
            st.close();
            kon.close();
          }
          catch (SQLException swl) {}
        }
      }
    });

  }

  public int konfirmasi_data(String action) {
    String st_kode_buku = data_kode_buku.getText();
    String st_jenis_buku = String.valueOf(data_jenis_buku.getSelectedItem());
    String st_no_buku = data_no_buku.getText();
    String st_judul_buku = data_judul_buku.getText();
    String st_data_nama_pengarang = data_nama_pengarang.getText();
    String st_thn_terbit = String.valueOf(data_thn_terbit.getSelectedItem());
    String st_nama_penerbit = data_nama_penerbit.getText();
    String st_jml_halaman = data_jml_halaman.getText();
    String st_jml_buku = data_jml_buku.getText();
    String st_no_rak_buku = data_no_rak_buku.getText();

    String konfirmData = "Anda Yakin ingin melakukan proses " + action +
                         " dengan Data sebagai Berikut : \n\nKode Buku : " +
                         st_kode_buku + "\nJenis Buku : " + st_jenis_buku +
                         "\nNo. Buku : " + st_no_buku + "\nJudul Buku : " +
                         st_judul_buku + "\nNama Pengarang : " +
                         st_data_nama_pengarang + "\nTahun Terbit : " +
                         st_thn_terbit + "\nNama Penerbit : " +
                         st_nama_penerbit + "\nJumlah Halaman : " +
                         st_jml_halaman + "\nJumlah Buku : " + st_jml_buku +
                         "\nNo. Rak Buku : " + st_no_rak_buku +
                         "\n\nJika Anda yakin, tekan YES !!!";
    int pesan = JOptionPane.showConfirmDialog(null, konfirmData,
                                              "Konfirmasi Data Proses " +
                                              action, JOptionPane.YES_NO_OPTION);
    return pesan;
  }

  public void komponen_aktif() {
    data_jenis_buku.setEnabled(true);
    data_kode_buku.setEnabled(true);
    data_judul_buku.setEnabled(true);
    data_thn_terbit.setEnabled(true);
    data_nama_pengarang.setEnabled(true);
    data_nama_penerbit.setEnabled(true);
    data_jml_halaman.setEnabled(true);
    data_jml_buku.setEnabled(true);
    data_no_rak_buku.setEnabled(true);
    tombol_simpan.setEnabled(true);
    tombol_update.setEnabled(true);
  }

  public void komponen_tidak_aktif() {
    data_jenis_buku.setEnabled(false);
    data_no_buku.setEnabled(false);
    data_kode_buku.setEnabled(false);
    data_judul_buku.setEnabled(false);
    data_thn_terbit.setEnabled(false);
    data_nama_pengarang.setEnabled(false);
    data_nama_penerbit.setEnabled(false);
    data_jml_halaman.setEnabled(false);
    data_jml_buku.setEnabled(false);
    data_no_rak_buku.setEnabled(false);
    tombol_simpan.setEnabled(false);
    tombol_update.setEnabled(false);
    label_jenis.setVisible(false);
    label_contoh.setVisible(false);
  }

  public void hapus_teks_komponen() {
    data_kode_buku.setText("");
    data_jenis_buku.setSelectedIndex(0);
    data_no_buku.setText("");
    data_judul_buku.setText("");
    data_thn_terbit.setSelectedIndex(0);
    data_nama_pengarang.setText("");
    data_nama_penerbit.setText("");
    data_jml_halaman.setText("");
    data_jml_buku.setText("");
    data_no_rak_buku.setText("");
  }
}
